Include.so Biblioteka w apk w Android studio [duplikat]

To pytanie ma już odpowiedź tutaj:

Próbuję stworzyć prostą aplikację na Androida, w której próbuję używać sqlcipher , która wewnętrznie używa bibliotek. so. Zapoznałem się z dokumentacją Jak używać sqlcipher z aplikacją android . I have followed kroki i kompiluje się bez żadnego błędu. Ale w czasie wykonywania rzuca UnsatisfiedLinkError.

Szukając go w Googlach, odkryłem, że gradle nie obsługuje. więc biblioteki jeszcze , ale znalazłem hack tutaj, którego próbuję użyć. Ale wyrzuca błąd czasu kompilacji w linii # 40 na gist, który jest,

tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}

Mówiąc

Nie można znaleźć właściwości 'com' w projekcie 'MyProject'

Tutaj zamieszczam kod z mojej kompilacji.plik gradle.

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/commons-codec.jar')
    compile files('libs/guava-r09.jar')
    compile files('libs/sqlcipher.jar')
}

targetCompatibility = 1.6
sourceCompatibility = 1.6

android {
    target = 'android-14'

    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 16
    }    

}

task copyNativeLibs(type: Copy) {
    from(new File(project(':MyProject').buildDir, 'native-libs')) { include '**/*.so' }
    into new File(buildDir, 'native-libs')
}

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}

Can, ktoś proszę mi pomóc w tym, co zrobiłem źle lub co powinienem zrobić, aby to uwzględnić. więc biblioteki w moim apk?

Ponieważ jestem nowy w rozwoju Androida i gradle, proszę przeprosić mnie, jeśli coś źle zrozumiałem.

Author: Rumit Parakhiya, 2013-05-22

3 answers

Miałem ten sam problem. Sprawdź komentarz w https://gist.github.com/khernyo/4226923#comment-812526

Pisze:

Dla gradle android plugin v0. 3 Użyj " com.android.buduj.gradle.zadania.PackageApplication "

To powinno rozwiązać twój problem.

 27
Author: Paglian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 17:14:45

Wypróbowałem rozwiązanie przedstawione w zaakceptowanej odpowiedzi i nie zadziałało dla mnie. Chciałem podzielić się tym, co dla mnie działa, ponieważ może to pomóc komuś innemu. Znalazłem to rozwiązanie tutaj .

Zasadniczo to, co musisz zrobić, to umieścić swoje pliki .so w folderze o nazwie lib (Uwaga: to nie jest libs i nie jest to błąd). Powinien mieć taką samą strukturę jak w pliku APK.

W moim przypadku to było:
Projekt:
| -- lib:
/ -- / -- armeabi:
/ -- / -- / -- . so files.

Więc zrobiłem folder lib, a wewnątrz niego folder armeabi, w którym wstawiłem wszystkie potrzebne pliki. so. Następnie spakowałem folder do .zip (struktura wewnątrz pliku zip jest teraz lib/armeabi/*.więc) zmieniłem nazwę pliku .zip na armeabi.jar i dodałem linię compile fileTree(dir: 'libs', include: '*.jar') do dependencies {} w pliku kompilacji gradle.

To rozwiązało mój problem w dość czysty sposób.
 253
Author: Assaf Gamliel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-16 08:20:55

Aby dołączyć natywne biblioteki potrzebujesz:

  1. Utwórz plik "jar" ze specjalną strukturą zawierającą pliki ".so";
  2. dołącz ten plik do listy zależności.

Aby utworzyć plik jar, użyj następującego fragmentu:

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    extension 'jar'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}

tasks.withType(Compile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

Aby dołączyć plik wynikowy, wklej następujący wiersz do sekcji "zależności" W " build.gradle " plik:

compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
 65
Author: Ruslan Yanchyshyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 06:00:25